In [1]:
import os
from pathlib import Path
In [2]:
import pandas as pd
import numpy as np
/home/kolen/.conda/envs/all3-intel/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216, got 192
  return f(*args, **kwds)
In [3]:
import holoviews as hv
hv.extension('bokeh')
In [4]:
import plotly.offline as py
py.init_notebook_mode()
In [5]:
from dautil.plot import iplot_column_slider, plot_column_slider
In [6]:
%matplotlib inline

Power Spectra

In [7]:
def extract_z(path):
    '''`path`: example: ps_z029.91_nf0.999799_useTs1_aveTb-03.79_200_300Mpc_v3
    '''
    return float(path.name.split('_')[1][1:])
In [8]:
def read_txt(path):
    df = pd.read_csv(path, delim_whitespace=True, header=None, names=('k', 'P_k', 'std'))
    df.set_index('k', inplace=True)
    return df
In [9]:
def read_txts(paths):
    dfs = (read_txt(path) for path in paths)
    zs = [extract_z(path) for path in paths]
    df = pd.concat(dfs, keys=zs)
    df.index.names = ('z', 'k')
    return df
In [10]:
%time df = read_txts(list(Path('~/21cmfast/21cmFAST/Out-of-box_Output/Power_spectra').expanduser().glob('*')))
CPU times: user 557 ms, sys: 6.86 ms, total: 564 ms
Wall time: 566 ms
In [11]:
%time df1 = read_txts(list(Path('~/21cmfast/21cmFAST/Output_files/Deldel_T_power_spec').expanduser().glob('*')))
CPU times: user 1.04 s, sys: 20 ms, total: 1.06 s
Wall time: 1.07 s
In [12]:
def reshape_P_k(df):
    return (df.P_k + 1.j * df['std']).unstack().T
In [13]:
P_k = reshape_P_k(df)
In [14]:
P_k1 = reshape_P_k(df1)
In [15]:
P_k_com = P_k.apply(np.real) + 1.j * P_k1.apply(np.real)
In [16]:
P_k.head()
Out[16]:
z 6.0 6.14 6.28 6.43 6.58 6.73 6.88 7.04 7.2 7.37 ... 24.87 25.38 25.91 26.45 27.0 27.56 28.13 28.71 29.31 29.91
k
0.026283 (0.1325591+0.03676527j) (0.36786840000000004+0.1020283j) (0.6796464+0.1885j) (0.9660213+0.2679261j) (1.20686+0.3347228j) (1.366726+0.3790615j) (1.4092049999999998+0.390843j) (1.3404770000000001+0.3717816j) (1.21538+0.3370858j) (1.077152+0.29874829999999997j) ... (0.001486144+0.0004121821j) (0.001745056+0.00048399150000000003j) (0.002083191+0.0005777732j) (0.002484712+0.0006891350999999999j) (0.002957575+0.0008202836999999999j) (0.0035133990000000004+0.0009744414999999999j) (0.00415433+0.001152204j) (0.004895534+0.0013577770000000001j) (0.0057760730000000005+0.001601995j) (0.0067488259999999994+0.0018717879999999999j)
0.044154 (0.117126+0.02342521j) (0.3749932+0.07499865j) (1.12992+0.22598400000000002j) (2.1902939999999997+0.43805879999999997j) (3.127589+0.6255178000000001j) (3.786211+0.7572420999999999j) (4.02252+0.804504j) (3.943636+0.7887273j) (3.615125+0.723025j) (3.326486+0.6652971999999999j) ... (0.003387281+0.0006774562j) (0.003978743+0.0007957486j) (0.004744218+0.0009488436j) (0.005659019+0.001131804j) (0.006733258000000001+0.001346652j) (0.007988031999999999+0.0015976060000000001j) (0.009440445+0.001888089j) (0.01109085+0.00221817j) (0.01306576+0.002613152j) (0.01521868+0.003043737j)
0.062322 (0.2840611+0.03523344j) (0.7492+0.09292683j) (1.432528+0.1776832j) (2.385954+0.2959412j) (3.688333+0.45748140000000004j) (4.9915910000000006+0.6191306j) (6.037411+0.7488486999999999j) (6.625906+0.8218424000000001j) (6.387955000000001+0.7923283j) (5.902158999999999+0.7320727j) ... (0.0077202830000000005+0.0009575833j) (0.009144143+0.001134191j) (0.01100465+0.001364959j) (0.01322173+0.001639953j) (0.01582232+0.001962517j) (0.01887003+0.002340539j) (0.02238147+0.00277608j) (0.02644147+0.0032796609999999997j) (0.03125608+0.00387684j) (0.03650972+0.004528474j)
0.090206 (0.2680305+0.01924347j) (0.6715496999999999+0.04821446j) (1.517982+0.1089847j) (2.599622+0.1866419j) (4.374341+0.3140594j) (6.550089+0.47026899999999994j) (8.522578+0.6118855j) (10.051789999999999+0.7216766j) (10.76349+0.7727733j) (10.62279+0.762672j) ... (0.01341064+0.0009628276j) (0.01581089+0.001135155j) (0.01893177+0.0013592220000000002j) (0.02265081+0.0016262339999999998j) (0.0270196+0.001939894j) (0.03212884+0.002306716j) (0.03804036+0.002731139j) (0.04484216+0.00321948j) (0.05290385+0.003798275j) (0.06170331+0.004430039j)
0.135230 (0.2977666+0.01117498j) (0.6904873+0.02591353j) (1.493208+0.05603909j) (2.8355799999999998+0.1064174j) (4.955178+0.1859645j) (7.109328+0.2668083j) (8.925717+0.3349762j) (10.49512+0.39387490000000003j) (11.72813+0.44014899999999996j) (12.31329+0.4621095j) ... (0.02112118+0.0007926637j) (0.0248839+0.0009338763j) (0.02979578+0.001118216j) (0.03565098+0.001337957j) (0.04255129+0.001596921j) (0.05062107+0.001899775j) (0.05995341+0.002250012j) (0.07071321+0.0026538190000000004j) (0.0834713+0.0031326220000000003j) (0.09748595+0.003658582j)

5 rows × 76 columns

In [17]:
%%opts Curve {+framewise} [logx=True logy=True]
plot_column_slider(P_k1)
Out[17]:
In [18]:
%%opts Curve {+framewise}
# [logx=True logy=True]
plot_column_slider(P_k_com)
Out[18]:
In [19]:
py.iplot(iplot_column_slider(P_k1.apply(np.real)))
In [20]:
col_wo_na = P_k1.columns[~np.any(P_k1.isna(), axis=0)].values
In [21]:
col_wo_na.sort()
In [22]:
P_k1 = P_k1[col_wo_na]

Global Evolution

In [23]:
def read_global_evolution(path):
    df = pd.read_csv(path, delim_whitespace=True, header=None, names=('zp', 'filling_factor_of_HI_zp', 'Tk_ave', 'x_e_ave', 'Ts_ave', 'T_cmb*(1+zp)', 'J_alpha_ave', 'xalpha_ave', 'Xheat_ave', 'Xion_ave'))
    df.set_index('zp', inplace=True)
    return df
In [24]:
path = Path('~/21cmfast/21cmFAST/Output_files/Ts_outs/global_evolution_Nsteps40_zprimestepfactor1.020_L_X3.2e+40_alphaX1.0_f_star100.0500_alpha_star0.5000_f_esc100.1000_alpha_esc-0.5000_Mturn5.0e+08_t_star0.5000_Pop2_200_300Mpc')
In [25]:
path = Path('~//21cmfast/21cmFAST/Output_files/Ts_outs/global_evolution_Nsteps40_zprimestepfactor1.020_L_X3.2e+40_alphaX1.0_f_star100.0500_alpha_star0.5000_f_esc100.1000_alpha_esc-0.5000_Mturn5.0e+08_t_star0.5000_Pop2_200_300Mpc')
In [26]:
!tail $path
1.390297	0.000000	0.145960	5.246405e-03	4.903661	6.520730	1.097208e-09	2.460082e+02	0.000000e+00	-4.393990e-03
1.343428	0.000000	0.139398	5.075968e-03	41.807174	6.392873	1.023891e-09	2.638287e+02	0.000000e+00	-4.283366e-03
1.297479	0.000000	0.133084	4.895171e-03	21.037496	6.267522	9.550113e-10	2.854356e+02	0.000000e+00	-4.176232e-03
1.252430	0.000000	0.127007	4.701897e-03	3.354516	6.144629	8.910291e-10	3.126037e+02	0.000000e+00	-4.072255e-03
1.208265	0.000000	0.121155	4.493161e-03	42.866835	6.024146	8.316940e-10	3.480219e+02	0.000000e+00	-3.971496e-03
1.164966	0.000000	0.115517	4.265083e-03	2.633670	5.906026	7.766454e-10	3.967406e+02	0.000000e+00	-3.873843e-03
1.122515	0.000000	0.110078	4.014840e-03	6.950936	5.790221	7.254752e-10	4.697440e+02	0.000000e+00	-3.779042e-03
1.080897	0.000000	0.104823	3.756744e-03	4.800606	5.676688	6.781564e-10	5.976154e+02	-1.015158e-04	-3.687344e-03
1.040095	0.000000	2.913865	3.620948e-03	7.323908	5.565380	6.349508e-10	5.377940e+02	-6.897152e+01	-5.570230e-03
1.000093	0.000000	2.761244	3.491140e-03	6.344967	5.456255	5.938832e-10	4.382724e+02	-6.201613e+01	-5.284818e-03
In [27]:
df = read_global_evolution(path)
In [28]:
df.sort_index(inplace=True)
In [29]:
df.head()
Out[29]:
filling_factor_of_HI_zp Tk_ave x_e_ave Ts_ave T_cmb*(1+zp) J_alpha_ave xalpha_ave Xheat_ave Xion_ave
zp
1.000093 0.0 2.761244 0.003491 6.344967 5.456255 5.938832e-10 438.2724 -62.016130 -0.005285
1.040095 0.0 2.913865 0.003621 7.323908 5.565380 6.349508e-10 537.7940 -68.971520 -0.005570
1.080897 0.0 0.104823 0.003757 4.800606 5.676688 6.781564e-10 597.6154 -0.000102 -0.003687
1.122515 0.0 0.110078 0.004015 6.950936 5.790221 7.254752e-10 469.7440 0.000000 -0.003779
1.164966 0.0 0.115517 0.004265 2.633670 5.906026 7.766454e-10 396.7406 0.000000 -0.003874
In [30]:
df.index.values
Out[30]:
array([ 1.000093,  1.040095,  1.080897,  1.122515,  1.164966,  1.208265,
        1.25243 ,  1.297479,  1.343428,  1.390297,  1.438103,  1.486865,
        1.536603,  1.587335,  1.639081,  1.691863,  1.7457  ,  1.800614,
        1.856627,  1.913759,  1.972035,  2.031475,  2.092105,  2.153947,
        2.217026,  2.281367,  2.346994,  2.413934,  2.482212,  2.551857,
        2.622894,  2.695351,  2.769258,  2.844644,  2.921536,  2.999967,
        3.079967,  3.161566,  3.244797,  3.329693,  3.416287,  3.504612,
        3.594705,  3.686599,  3.780331,  3.875938,  3.973456,  4.072926,
        4.174384,  4.277872,  4.383429,  4.491097,  4.600919,  4.712938,
        4.827197,  4.94374 ,  5.062615,  5.183868,  5.307545,  5.433696,
        5.56237 ,  5.693618,  5.82749 ,  5.96404 ,  6.103321,  6.245388,
        6.390296,  6.538101,  6.688863,  6.84264 ,  6.999493,  7.159483,
        7.322673,  7.489126,  7.658908,  7.832087,  8.008729,  8.188904,
        8.372682,  8.560135,  8.751338,  8.946364,  9.145291,  9.348197,
        9.555161,  9.766264,  9.981589, 10.201221, 10.425246, 10.653751,
       10.886827, 11.124563, 11.367055, 11.614396, 11.866684, 12.124018,
       12.386498, 12.654228, 12.927313, 13.205859, 13.489976, 13.779776,
       14.075371, 14.376878, 14.684415, 14.998103, 15.318067, 15.644429,
       15.977318, 16.316864, 16.6632  , 17.016464, 17.376793, 17.744329,
       18.119217, 18.5016  , 18.891632, 19.289465, 19.695253, 20.109158,
       20.531342, 20.961967, 21.401207, 21.849232, 22.306217, 22.772341,
       23.247787, 23.732742, 24.227398, 24.731945, 25.246584, 25.771515,
       26.306946, 26.853085, 27.410147, 27.97835 , 28.557917, 29.149075,
       29.752056])
In [56]:
df_big_z = df.loc[df.index >= 5.9]
# df_big_z = df
In [32]:
df.shape
Out[32]:
(139, 9)
In [33]:
py.iplot(iplot_column_slider(df))
In [106]:
def format_float_array(array):
    string = ','.join(f'{i:.16}' for i in array)
    print(len(string))
    return string
In [90]:
df_big_z.shape[0] + 3
Out[90]:
79
In [91]:
print(','.join(('0', '5.95', format_float_array(df_big_z.index.values), '30.')))
810
0,5.95,5.96404,6.103321,6.245388,6.390296,6.538101,6.688863,6.842639999999999,6.999492999999999,7.159483,7.322673,7.489126,7.658908,7.832087,8.008728999999999,8.188903999999999,8.372682000000001,8.560135000000001,8.751338000000001,8.946363999999999,9.145291,9.348197000000001,9.555161,9.766264,9.981589,10.201221,10.425246,10.653751,10.886827,11.124563,11.367055,11.614396,11.866684,12.124018,12.386498,12.654228,12.927313,13.205859,13.489976,13.779776,14.075371,14.376878,14.684415,14.998103,15.318067,15.644429,15.977318,16.316864,16.6632,17.016464,17.376793,17.744329,18.119217,18.5016,18.891632,19.289465,19.695253,20.109158,20.531342,20.961967,21.401207,21.849232,22.306217,22.772341,23.247787,23.732742,24.227398,24.731945,25.246584,25.771515,26.306946,26.853085,27.410147,27.97835,28.557917,29.149075,29.752056,30.
In [107]:
print(','.join(('-2', '-1', format_float_array(df_big_z.x_e_ave.values), '0')))
995
-2,-1,0.001117013,0.001023735,0.0009362602,0.000854464,0.0007782149,0.0007073621,0.00064172,0.0005811004,0.0005262021,0.0004780447,0.0004365587000000001,0.0004013149,0.0003715573000000001,0.0003463328,0.000325201,0.0003074503,0.000292537,0.0002800515,0.0002696148,0.0002608876,0.0002536635,0.0002476625,0.0002427183,0.0002386412,0.0002349889,0.0002309913,0.0002263293,0.0002210947,0.0002155082,0.0002098274,0.0002042996,0.0001991403,0.0001944928,0.0001904641,0.0001870542,0.0001842557,0.0001820293,0.0001803089,0.0001790365,0.000178146,0.0001775812,0.0001772763,0.0001771834,0.0001772654,0.0001774832,0.000177809,0.0001782208,0.0001786995,0.0001792314,0.0001798065,0.0001804161,0.0001810538,0.0001817147,0.0001823958,0.0001830941,0.0001838079,0.0001845358,0.0001852772,0.0001860313,0.0001867979,0.0001875768,0.000188368,0.0001891715,0.0001899874,0.0001908159,0.0001916572,0.0001925115,0.0001933791,0.0001942602,0.0001951552,0.0001960643,0.0001969879,0.0001979262,0.0001988797,0.0001998485,0.0002008332,0
In [ ]: